home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1995 #5 & #6 / Amiga Plus CD - 1995 - No. 5 and 6.iso / pd / serien / purity / nr.11 / workshop / pascal-workshop < prev    next >
Text File  |  1995-04-21  |  12KB  |  378 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.               --------- WORKSHOP  PCQ-Pascal ----------
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19. ___________________________________________________________________________
  20. ---------------------------------------------------------------------------
  21.  
  22.  
  23.  
  24.                          -- Vorstellung --
  25.  
  26.  
  27. Die Programmiersprache Pascal kennt ja normalerweise jeder ComputerFreak!!!
  28. Diese Programmiersprache zählt auf jeden Fall zu den beliebtesten in der PC-
  29. Szene, obwohl C auch stark im kommen ist. Pascal ist aber im gegensatz zu C
  30. leichter zu erlernen. In der Amiga Szene gibt es einen sehr guten Pascal-
  31. Compiler und zwar den Kick Pascal von ???, aber man muß so um die 200-300 DM
  32. für diese Sprache bezahlen. Es gibt aber auch in der PD-Szene einen Compiler
  33. der als Freeware freigegeben ist.
  34.  
  35. Es handelt sich um   ~~~ PCQ PASCAL ~~~
  36.  
  37. Geschrieben von einem Amerikaner namens Patrick Quaid.
  38.  
  39. Man benötigst entweder die Fish Disks 503,511 und evtl. 521, oder aus der
  40. Purity PD-Serie die Nr. 3 um mit diesem Dialekt zu Programmieren.
  41. Am einfachsten ist es mit der Purity 3 da alles schon passend installiert
  42. ist, und eine deutsche Anleitung dabei ist. Man muß nur noch die Disketten
  43. entpacken!!!!
  44.  
  45.  
  46. ___________________________________________________________________________
  47. ---------------------------------------------------------------------------
  48.  
  49.  
  50.  
  51.                           -- EINLEITUNG --
  52.  
  53.  
  54.  
  55.  
  56. So, bevor wir mit dem Workshop anfangen wollen, müssen wir noch einiges
  57. erklären. Wer seine Disketten schon passend installiert hat, und alles
  58. vernünftig läuft, kann die Einleitung getrost überspringen.
  59.  
  60.  
  61. Ich gehe mal davon aus das wir mit der Purity 3 arbeiten. Nach dem die Dis­
  62. ketten entpackt sind, was eigentlich keine Schwierigkeiten macht, da es
  63. beschrieben ist,haben wir am Ende 2 Disketten !!!!
  64.  
  65. Einmal die Disk 1, wo die ganzen Includes,Compiler etc. drauf sind,
  66. und die Disk 2, wo Beispiele vom PCQPascal- Ersteller Patrick Quaid bei-
  67. gefügt sind, und ein paar Hilfsprogramme, eine deutsche Anleitung für den
  68. PCQ-Compiler und ein paar Demos.
  69.  
  70.  
  71. Bevor wir mit der Einleitung  beginnen, möchte ich mich vorab bei einigen
  72. Leuten bedanken. Erst mal bei Patrick Quaid, für den Compiler (auch wenn ich
  73. ihn noch nicht kenne) und bei Alain Declercq vom A&M Club, daß er mich auf
  74. die Idee gebracht hat, einen Workshop über PCQ zu schreiben.
  75.  
  76.  
  77. Eins möchte ich auch noch zum Thema Pascal schreiben!!!
  78. Die Purity Serie befaßt sich nur mit Pascal und ist wirklich eine super
  79. PD-Serie, die ich jedem Pascal Programmierer ans Herz legen will.
  80.  
  81.  
  82. Falls Du die Disketten noch nicht hast, kannst Du mich gerne mit Disks,
  83. Rückporto anschreiben , und ich kopiere Dir die beiden Disketten.
  84. Die Adresse steht dann am Ende des Workshops.
  85.  
  86.  
  87. So, fangen wir an. Wir starten, sobald wir mit dem DME(oder einen anderen
  88. Editor) ein Programm geschrieben haben (--- Siehe unten im WorkShop ---).
  89.  
  90. Wir klicken auf das File `Make`, und geben den Namen des Programms ein.
  91. Dieses geschriebene Programm muß sich im `.p` Verzeichnis befinden, sonst
  92. findet der Compiler das Programm nicht.
  93.  
  94. WICHTIG:  Wir speichern die Programme immer gleich im `.p` Verzeichnis,
  95.           und mit der Endung `.p` ab. Die Zeichen `` natürlich nicht mit
  96.           eingeben.
  97.  
  98. Wenn alles gut läuft compliert,assembliert und linkt das Programm `Make`
  99. alles für Dich.
  100.  
  101. Das fertige Programm liegt dann immer im Verzeichnis`.bin`. Dann gehst Du
  102. ins CLI oder Shell, und gibst `cd DF0:.bin` ein (Die Disk 1, muß sich
  103. natürlich im Laufwerk DF0: befinden). Danach den Namen des Programms, ohne
  104. die Endung `.p`. Dann müßte es ohne Probleme laufen. Der Name der Disk 1
  105. muß auf jeden Fall `INCLUDE` heißen, oder man muß das Verzeichnis `INCLUDE`
  106. mit -- assign Include: Pascal(bzw. den Namen der Disk):Include -- zuweisen,
  107. weil das Programm `Make` und der Compiler die Includes etc. sonst nicht fin­
  108. det. Ich hatte einige Probleme beim ersten Start damit!!!
  109.  
  110.  
  111. So, das wär eigentlich das wichtigste vorab. Bei Fragen oder Problemen
  112. kannst Du dich an mich wenden. Ich helfe gerne bei kleinen und wenn ich es
  113. kann, auch bei großen Problemen !!!!!
  114.  
  115.  
  116. Ich gebe keine Garantie das alles 100% richtig programmiert ist. Bei
  117. Fehlern oder Verbesserungsvorschlägen bitte mit mir in Verbindung setzen.
  118. Ich bin erst seit kurzem von ModulaII zu Pascal gekommen.
  119. Ich kann ein wenig Kritik ertragen !!!!!!!!
  120.  
  121. ____________________________________________________________________________
  122. ----------------------------------------------------------------------------
  123.  
  124.  
  125.  
  126.  
  127.                 --------  Der Workshop --------
  128.  
  129.  
  130.  
  131. Nun, nachdem wohl alles einigermaßen verstanden ist, kann es ja losgehen.
  132. Weil alle Programmier-Worshops mit dem Programm "Hello World" anfangen,
  133. werden wir es nicht so machen.
  134. Wenn Du jetzt deinen Editor gestartet hast, gibst Du ein:
  135.  
  136.  
  137.  
  138. Program MeinErstesProgramm;
  139.   Begin
  140.     WriteLn("Mein erstes Pascal-Proggy am AMIGA");
  141. End.
  142.  
  143.  
  144.  
  145. und speichern es unter dem Namen MeinErstesProgramm.p im .p Verzeichnis ab.
  146. Als nächstes klickst Du das Programm MAKE an und gibst "nur"
  147. `MeinErstesProgramm` ein, ohne der Endung .p. Das Make Utility übersetzt,
  148. assembliert und linkt das Programm. Am Ende des Übersetzungsvorganges
  149. müßte dann eigentlich stehen "BLink complete - Maximum code size .... usw..
  150. Wenn dieses dort steht ist alles klar gelaufen, wenn nicht überprüfe
  151. den Quellcode noch mal. Das complierte Programm findest Du im .bin Direc­
  152. tory. Mach dann ein CLI/Shell Fenster auf gib "cd df0:.bin" ein,
  153. nachdem Du die Returntaste gedrückt hast gibst Du dann "MeinErstesProgramm"
  154. ein, und schau da was da steht !!!!! Naja, so schwer war das doch nicht,
  155. oder ????
  156.  
  157.  
  158.  
  159. Zeile 1: -Programm Mein..usw..- `Program` steht immer am Anfang, da sich der
  160.           Compiler daran orientiert. Danach der Name des Programms, wie es
  161.           heißen soll.
  162.  
  163. Zeile 2: -Begin- muß immer angegeben werden, weil nach dem `Begin` das
  164.           eigentliche abarbeiten des Programms beginnt.
  165.  
  166. Zeile 3: -WriteLn("......")- Nach WriteLn(" kann man einen belibigen Text
  167.           eingeben, aber am Ende des Textes nicht die Zeichen ") vergessen.
  168.  
  169. Zeile 4: -End- Bedeutet Ende des Programms.
  170.  
  171.  
  172.  
  173. Und weiter geht`s. Wir wollen ja noch richtig programmieren.
  174. Das nächste Programm heißt EingabeAusgabe. Das Programm speicherst Du
  175. ebenfalls im ".p" Verzeichnis ab.
  176.  
  177.  
  178.  
  179. Program EingabeAusgabe;
  180.   var test  : array [1..50] of char;
  181.     Begin
  182.       WriteLn("Bitte etwas eingeben : ");
  183.       Readln(test);
  184.       WriteLn("----------");
  185.       WriteLn("Ihre Eingabe war : ");
  186.       WriteLn(test);
  187. End.
  188.  
  189.  
  190.  
  191. Mit var legst Du eine Variable fest, in diesem Fall `test`. Diese Variable
  192. kann 50 Zeichen aufnehmen !!!! Ich hätte auch einfach nur schreiben
  193. können:
  194.  
  195.  
  196.   var test   : char ;
  197.  
  198.  
  199. Dann könnte man der Variablen test aber nur 1 Zeichen zuweisen. Mit der
  200. Zuweisung:
  201.  
  202.  
  203.   var test   : String ;          { Bemerkung meinerseits am Textende, Diesel }
  204.  
  205.  
  206. habe ich immer einen Guru hervorgerufen, wenn ich mehr wie vier Zeichen
  207. zugewiesen habe. Liegt wohl daran das ein String nicht mehr aufnehmen kann!!
  208.  
  209.  
  210. Mit ReadLn(test); erwartet der Computer eine Eingabe von Dir. Die Variable
  211. test merkt sich dann die Eingabe des Users und gibt sie später wieder mit
  212. WriteLn(test) aus. Bei WriteLn(test) darf man keine ""(Gänsefüßchen) mit
  213. eintippen, da sonst nur test ausgegeben wird.
  214.  
  215. Kommen wir zum nächsten Programm.
  216.  
  217.  
  218.  
  219. Program Addieren;
  220.   Var Zahl1   : Integer;
  221.       Zahl2   : Integer;
  222.     Begin
  223.       WriteLn("Jetzt wollen wir mal addieren !!!");
  224.       WriteLn("Bitte geben Sie die erste Zahl ein : ");
  225.       Readln(Zahl1);
  226.       WriteLn("Bitte geben Sie die zweite Zahl ein : ");
  227.       Readln(Zahl2);
  228.       WriteLn("-----------");
  229.       WriteLn("Zahl 1 + Zahl 2 ergibt");
  230.       WriteLn(Zahl1 + Zahl2);
  231. End.
  232.  
  233.  
  234.  
  235. Den Variablen Zahl1 & Zahl2 geben wir eine Zuweisung von Zahlen. Man kann
  236. dann mit WriteLn(Zahl1 + Zahl2); das Ergebnis von Zahl1 + Zahl2 ausgeben.
  237. Das selbe geht mit dem Programm Subtrahieren.
  238.  
  239.  
  240.  
  241. Program Subtrahieren;
  242.   Var Zahl1   : Integer;
  243.       Zahl2   : Integer;
  244.     Begin
  245.       WriteLn("Jetzt wollen wir mal addieren !!!");
  246.       WriteLn("Bitte geben Sie die erste Zahl ein : ");
  247.       Readln(Zahl1);
  248.       WriteLn("Bitte geben Sie die zweite Zahl ein : ");
  249.       Readln(Zahl2);
  250.       WriteLn("-----------");
  251.       WriteLn("Zahl 1 - Zahl 2 ergibt");
  252.       WriteLn(Zahl1 - Zahl2);
  253. End.
  254.  
  255.  
  256.  
  257. Hierbei halt nur mit - anstatt +. Das kann man auch mit dem Zeichen / für
  258. Teilen und * für Multiplizieren machen. Du kannst es ja einfach mal
  259. alleine ausprobieren.
  260.  
  261. Wenn Du genug ausprobiert hast, geht`s weiter mit einer FOR-Schleife.
  262.  
  263.  
  264.  
  265. Program Schleife;
  266. Var  i  : Integer;
  267. Begin
  268. For i := 1 To 10 Do WriteLn(i);
  269. WriteLn("So, die 10 haben wir erreicht, jetzt geht`s abwärts");
  270. For i := 10 DownTo 1 Do WriteLn(i);
  271. End.
  272.  
  273.  
  274.  
  275. Nun können wir auch schon Schleifen programmieren. Ich glaube große Er-
  276. klärung muß bei diesem Beispiel nicht sein. Die Variable `i`, wird solange
  277. hochgezählt(runtergezählt) bis es den Wert nach dem `To` ereicht hat, und
  278. gibt den Befehl nach `Do` nach jedem Schleifendurchlauf aus.
  279.  
  280.  
  281.  
  282. So, für`s erste sollte das genügen, Ihr könnt mit den Programmen ja jetzt
  283. ein wenig experimentieren, und vieleicht kommt Ihr ja auf die eine oder
  284. andere Idee. Auf der zweiten Diskette befinden sich im Verzeichnis `Exam­
  285. ples`, vom Programmierer einige Beispielprogramme, die Du dir ja mal an­
  286. gucken kannst, um vieleicht etwas daraus etwas zu lernen. Es sind aber nur
  287. die SourceCodes( Programmiertexte) enthalten. Um sich die Programme anzus­
  288. ehen, müßt Ihr es noch durch das Programm `Make` schicken.
  289.  
  290. Ich würde mich sehr über Deine Kritik/Idee an diesen Worshop freuen!!!!
  291. Du kannst die Kritik auch über Alain schicken !!!!
  292.  
  293. YGAR wird es mir bestimmt weiterreichen, oder ?????????????????
  294.  
  295. Ich werde auch vieleicht in Zukunft einen 2. Workshop machen, der ein wenig
  296. mehr ins Detail geht, und zwar wie man die Library`s anspricht und mit Pro­
  297. zeduren arbeitet.
  298.  
  299.  
  300.  
  301.  
  302. Meine Adresse:
  303. Andreas Mauß
  304. Neuenkirchener Str. 40
  305. 4840 Rheda-WD
  306. Tel. 05242/49807
  307.  
  308.  
  309.  
  310.  
  311. 08.01.93
  312.  
  313.  
  314.  
  315.  
  316.                          ~~~~~~    FINE    ~~~~~~
  317.  
  318.  
  319. Noch nicht ganz 'FINE', aber fast. Ein String ist in PCQ-Pascal wie auch in
  320. C  nur ein Zeiger auf einen Text, d.h. ein Zeiger auf einen Speicherbereich,
  321. in den Ihr einen beliebigen Text einlesen könnt. Ein Beispiel, wie man es
  322. nicht machen sollte:
  323.  
  324. Program GuruOrNot;
  325. Var
  326.     txt : String;    { Nur ein Zeiger, Standard : 0 }
  327. Begin
  328.     writeln("Text> ");
  329.     readln(txt);
  330. End.
  331.  
  332. Nun, was passiert ? Das Programm startet, in der Variablen txt steht nichts,
  333. also Null. D.h. txt zeigt auf den Speicher ab der Speicherstelle NULL. Nun,
  334. wir geben drei Zeichen ein, und nichts passiert. Wir geben vier Zeichen ein,
  335. und Amigas mit 68000  laufen immer noch. Aber spätestens mit fünf Zeichen
  336. rufen wir einen Guru hervor. Warum ?
  337.  
  338. Wie gesagt, zeigt Text auf das RAM ab 0. Ab Zelle 4 steht nun aber leider
  339. die Adresse der Execbase, des Angelpunktes, an dem das gesamte System hängt.
  340. Und die wird bei 5 bzw. 6 Zeichen einfach überschrieben ... Grüße aus
  341. Indien ! Also muß dafür gesorgt werden, das txt immer auf einen Speicher-
  342. bereich zeigt, der uf alle Fälle groß genug ist. Dazu gibt es mehrere
  343. Möglichkeiten:
  344.  
  345. ...
  346. Var txt   : String;
  347.     buf1  : Array[0..99] of Char;
  348.  
  349. Begin
  350.     txt := Adr( buf1 );
  351. End.
  352.  
  353. Hier zeigt txt dann auf den Bereich, der durch buf1 reserviert ist, also
  354. 100 Bytes. Reicht fürds erste. Mögl. 2 :
  355.  
  356. ...
  357. {$I "Include:utils/stringlib.i" }
  358.  
  359. Var txt : String;
  360. Begin
  361.     txt := AllocString(80);
  362.     ...
  363.     FreeString( txt );
  364. End.
  365.  
  366. Jetzt wird über die PCQ-Routine AllocString (zu finden in stringlib.i )
  367. ein Puffer über 80 Bytes vom System geholt und ein Zeiger darauf an
  368. txt übergeben. Mit FreeString gibt man den Speicher an das System
  369. zurück.
  370.  
  371. Soweit fürs erste zum Stringhandling. Bis demnächst ...
  372.  
  373.  
  374.  
  375.                             Diesel
  376.  
  377.  
  378.